package servlet;

import pojo.User;
import service.UserService;
import service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

// 注解
@WebServlet(urlPatterns = "/user")
public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        UserService userService = new UserServiceImpl();

        req.setCharacterEncoding("UTF-8");

        String action = req.getParameter("action");
        if ("add".equals(action)) {
            // 添加用户
            String name = req.getParameter("name");
            String pass = req.getParameter("pass");

            int result = userService.addUser(new User(name, pass));

            // 重定向到用户列表
            resp.sendRedirect("user?action=list");
            return; // 终止方法执行

        } else if ("delete".equals(action)) {
            String sid = req.getParameter("id");

            try {
                Integer id = Integer.parseInt(sid);

                // 删除用户
                int result = userService.deleteUserById(id);

                if (result > 0) {
                    // 重定向到用户列表
                    resp.sendRedirect("user?action=list");
                    return; // 终止方法执行
                } else {
                    // 处理删除失败的情况，可以重定向到错误页面或显示消息
                }
            } catch (NumberFormatException e) {
                e.printStackTrace();
                // 处理无效的ID，例如重定向到错误页面
            }

        } else if ("toupdate".equals(action)) {
            String sid = req.getParameter("id");

            Integer id = Integer.parseInt(sid);

            // 根据id查询用户信息
            User user = userService.findUserById(id);

            // 将查询到的用户信息存储到作用域中
            req.setAttribute("user", user);
            req.getRequestDispatcher("update.jsp").forward(req, resp);

        }else if ("update".equals(action)) {
            String sid = req.getParameter("id");
            Integer id = Integer.parseInt(sid);
            // 拿到网页传递过来的用户名和密码
            String name = req.getParameter("name");
            String pass = req.getParameter("pass");

            int result = userService.updateUser(new User(id,name,pass));

            // 重定向
            resp.sendRedirect("user?action=list");
            return; // 终止方法执行
        }


        // 获取参数
        String name = req.getParameter("name");
        String pass = req.getParameter("pass");

        User condition = new User(name, pass);

        List<User> users = userService.findAll(condition);
        // 把数据放到请求域中
        req.setAttribute("users", users);
        req.setAttribute("condition", condition);
        // 在哪个页面显示数据
        req.getRequestDispatcher("/index.jsp").forward(req, resp);
    }
}
